import { marked } from 'marked';
import hljs from 'highlight.js';

// 配置 marked
marked.setOptions({
  highlight: function(code, lang) {
    const language = hljs.getLanguage(lang) ? lang : 'plaintext';
    return hljs.highlight(code, { language }).value;
  },
  breaks: true,
  gfm: true,
  langPrefix: 'hljs language-'
});

// 解析 frontmatter
const parseFrontmatter = (content) => {
  const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/;
  const match = content.match(frontmatterRegex);
  
  if (!match) {
    return { metadata: {}, content };
  }
  
  const [, frontmatterStr, markdownContent] = match;
  const metadata = {};
  
  // 解析 YAML 格式的 frontmatter
  frontmatterStr.split('\n').forEach(line => {
    const colonIndex = line.indexOf(':');
    if (colonIndex > 0) {
      const key = line.substring(0, colonIndex).trim();
      let value = line.substring(colonIndex + 1).trim();
      
      // 处理数组格式 [item1, item2, item3]
      if (value.startsWith('[') && value.endsWith(']')) {
        value = value.slice(1, -1).split(',').map(item => item.trim());
      }
      // 处理布尔值
      else if (value === 'true') {
        value = true;
      } else if (value === 'false') {
        value = false;
      }
      
      metadata[key] = value;
    }
  });
  
  return { metadata, content: markdownContent };
};

// 生成文章 ID（基于文件名）
const generatePostId = (filename) => {
  return filename.replace('.md', '').replace(/[^a-zA-Z0-9-]/g, '-');
};

// 自动扫描 blogs 目录下的所有 Markdown 文件
const getBlogFiles = () => {
  // 使用 webpack 的 require.context 自动扫描文件
  const context = require.context('../../blogs', false, /\.md$/);
  const files = {};

  context.keys().forEach(key => {
    const filename = key.replace('./', '');
    files[filename] = () => context(key);
  });

  return files;
};

// 加载所有文章
export const loadAllPosts = async () => {
  const posts = [];
  const markdownFiles = getBlogFiles();

  for (const [filename, importFn] of Object.entries(markdownFiles)) {
    try {
      const module = await importFn();
      const content = module.default || module;
      const { metadata, content: markdownContent } = parseFrontmatter(content);
      
      const post = {
        id: generatePostId(filename),
        title: metadata.title || '无标题',
        excerpt: metadata.excerpt || '',
        content: markdownContent,
        date: metadata.date || new Date().toISOString().split('T')[0],
        readTime: metadata.readTime || '5 分钟',
        tags: metadata.tags || [],
        image: metadata.image || '',
        encrypted: metadata.encrypted || false
      };
      
      posts.push(post);
    } catch (error) {
      console.error(`加载文章 ${filename} 失败:`, error);
    }
  }
  
  // 按日期排序（最新的在前）
  return posts.sort((a, b) => new Date(b.date) - new Date(a.date));
};

// 根据 ID 加载单篇文章
export const loadPostById = async (id) => {
  const posts = await loadAllPosts();
  return posts.find(post => post.id === id);
};
